//定义结构体 
typedef struct 
{ 
    /*****安排过度过程*******/ 
    float x1;//v的跟踪信号                   
    float x2;//各阶的微分信号
    float r;//时间尺度，快速因子           
    float h;//ADRC系统采样时间 
    float h0;
    float fh;  
    /***********扩张状态观测器*********/ 
    float z1;//一阶状态量 
    float z2;//二阶状态量 
    float z3;//三阶状态量
    float e;//误差            
    float v;     
    float b0;     
    float y;//系统输出量 
    float w0;//观测器带宽 
    /************摩擦力矩**************/ 
    float Ff； 
    /*********系统状态误差反馈率*********/ 
    float e1;                       
    float e2;//状态量微分项 
    float u0;//非线性组合系统输出    
    float u;//带扰动补偿后的输出 
    /*********第一种组合形式************/ 
    float a1;//非线性组合参数     
    float a2;//非线性组合参数 
    float m;//线性段的区间长度 
}ADRC_Data; 
//数据存储 
const float ADRC_Unit[7]= 
{ 
/*TD 跟踪微分器   LESO    扰动补偿      
    /*  r    h        w0      b0        a1        a2       m 非线性组合*/
    {100 ,  0.005 ，  30      0.01,     2        0.02,     20.0}                   
}; 


/*********限幅函数*********/ 
float Constrain_Float(float amt, float low, float high);

/********* Sign 函数*********/ 
int16_t Sign_ADRC(float Input);


/********* Fsg 函数*********/ 
int16_t Fsg_ADRC(float x,float d) ;

/*********幂次函数*********/ 
float Fal_ADRC(float e,float alpha,float m);


/*********初始化参数*********/ 
void ADRC_Init(ADRC_Data *ADRC_Input);

/************ADRC 跟踪微分器TD********************/ 
void Fhan_ADRC(ADRC_Data *ADRC_Input,float expect_ADRC); 

/**************非线性组合********************/ 
void Nolinear_Conbination_ADRC(ADRC_Data *ADRC_Input);

/**************摩擦力矩 Ff**************************/ 
void Friction_ADRC(ADRC_Data *ADRC_Input);

/*********************主程序**********************/ 
void ADRC_Control(ADRC_Data*ADRC_Input,float expect_ADRC,float feedback_y,float feedback_v);
